/*Node 题目
题目 1
第一步 阅读代码并写出输出*/

const tree = {
    a: ['b', 'c'],
    b: ['e'],
    e: ['f']
};
const keys = {};
for (let k in tree) {
    keys[k] = true;
    for (let ck of tree[k]) {
        keys[ck] = true;
    }
}
const getNode = id => keys[id] ? {
    id,
    children: tree[id] || []
} : null;
const getTree = id => ({
    id,
    children: getNode(id).children.map(getTree)
});
console.log(JSON.stringify(getTree('a'),null,2));

let ret = {
    id: 'a',
    children: [
        {
            id: 'b',
            children: [
                {id: 'e', children: [{id: 'f', children: []}]}
            ]
        },
        {id: 'c', children: []}
    ]
};
console.log(JSON.stringify(ret,null,2));





//const getNodeAsync
/*
//const getTreeAsync
第一步的答案写在这里
第二步
改写 getNode 为异步的 getNodeAsync （ callback,
    promise, generator 等方式皆可）。
例子(callback)
function	getNodeAsync(id,	cb)	{
    process.nextTick(cb.bind(null,	null,	getNode(id)));
}
并利用 getNodeAsync 实现 getTreeAsync。
可以使用 async,bluebird,co 等。*/
